x86 hpet: two more fixes for c/s 19419
authorKeir Fraser <keir.fraser@citrix.com>
Wed, 1 Apr 2009 13:04:46 +0000 (14:04 +0100)
committerKeir Fraser <keir.fraser@citrix.com>
Wed, 1 Apr 2009 13:04:46 +0000 (14:04 +0100)
vector_channel[], as its name already says, is vector-, not
irq-indexed.

hpet_assign_irq() sits not only in the boot path, but also in the
resume one. Short of knowing why this is, simply checking whether a
vector was already assigned prevents leaking previously assigned ones.

Signed-off-by: Jan Beulich <jbeulich@novell.com>
xen/arch/x86/hpet.c

index ea7c5be1449bde12a9cc4e0faa97ffe7076fecbe..7671634ef2acd612057e2e87ae5aa169c49087fb 100644 (file)
@@ -45,7 +45,7 @@ static unsigned int num_hpets_used; /* msi hpet channels used for broadcast */
 
 DEFINE_PER_CPU(struct hpet_event_channel *, cpu_bc_channel);
 
-static int vector_channel[NR_IRQS] = {[0 ... NR_IRQS-1] = -1};
+static int vector_channel[NR_VECTORS] = {[0 ... NR_VECTORS-1] = -1};
 
 #define vector_to_channel(vector)   vector_channel[vector]
 
@@ -345,6 +345,9 @@ static int hpet_assign_irq(struct hpet_event_channel *ch)
 {
     int vector;
 
+    if ( ch->vector )
+        return 0;
+
     if ( (vector = assign_irq_vector(AUTO_ASSIGN_IRQ)) < 0 )
         return vector;